package io.github.bigbird0101.youyishi.code;

import io.github.bigbird0101.youyishi.code.compile.CodeMetadata;

import java.util.List;

/**
 * 代码生命周期
 * @author m15179835326@163.com
 * @date 2023-03-27 09:20
 */
public interface CodeLifecycle {
    /**
     * 生成代码
     * @param generateCodeParam 生成代码参数
     * @return 生成代码
     */
    List<CodeContent<?>> generate(GenerateCodeParam generateCodeParam);

    /**
     * 编译
     * @param codeContents code代码
     * @return 编译后的代码
     */
    List<CodeMetadata> compile(List<CodeContent<?>> codeContents);

    /**
     * 运行
     * @param codeMetadatas 代码元数据
     */
    void run(List<CodeMetadata> codeMetadatas);

    /**
     * 销毁这个代码所涉及的资源
     * @param codeContents code代码
     */
    default void destroy(List<CodeContent<?>> codeContents){

    }
}
